action muxer: Change inheritance
authorMatthias Clasen <mclasen@redhat.com>
Sat, 22 Jun 2019 22:51:23 +0000 (22:51 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 22 Jun 2019 22:51:23 +0000 (22:51 +0000)
Previously, we would not look any further for
an action once we found a match for the prefix,
defining inheritance by groups. Change this to
inheritance for individual actions, since we
are moving towards individual actions as the
main ingredient in GTKs action support.

gtk/gtkactionmuxer.c

index 8810ffb921e842f6f24b3fa667a7b8b40923399c..b752ea08e7c17ff5948106e0febc109d153e6156 100644 (file)
@@ -174,6 +174,7 @@ gtk_action_muxer_find_group (GtkActionMuxer  *muxer,
 {
   const gchar *dot;
   gchar *prefix;
+  const char *name;
   Group *group;
 
   dot = strchr (full_name, '.');
@@ -181,14 +182,20 @@ gtk_action_muxer_find_group (GtkActionMuxer  *muxer,
   if (!dot)
     return NULL;
 
+  name = dot + 1;
+
   prefix = g_strndup (full_name, dot - full_name);
   group = g_hash_table_lookup (muxer->groups, prefix);
   g_free (prefix);
 
   if (action_name)
-    *action_name = dot + 1;
+    *action_name = name;
+
+  if (group &&
+      g_action_group_has_action (group->group, name))
+    return group;
 
-  return group;
+  return NULL;
 }
 
 GActionGroup *
@@ -199,8 +206,10 @@ gtk_action_muxer_find (GtkActionMuxer  *muxer,
   Group *group;
 
   group = gtk_action_muxer_find_group (muxer, action_name, unprefixed_name);
+  if (group)
+    return group->group;
 
-  return group->group;
+  return NULL;
 }
 
 void